#ifndef __SM4_IMPL_H
#define __SM4_IMPL_H

#ifdef __cplusplus
extern "C" {
#endif

#include <stdint.h>

/* SM4Parameters定义 */
#define SM4_IMPL_BLOCK_SIZE    16  // 128位块大小
#define SM4_IMPL_KEY_SIZE      16  // 128位Key
#define SM4_IMPL_ROUNDS        32  // SM4Use32轮

/* 结构体定义 */
typedef struct {
    uint32_t round_key[SM4_IMPL_ROUNDS];  // 32个轮Key
} SM4_Impl_Context;

/* Function声明 */

/**
 * @brief InitializeSM4上下文（Key扩展）
 * @param ctx SM4上下文指针
 * @param key 128位Key
 */
void SM4_Impl_Init(SM4_Impl_Context* ctx, const uint8_t* key);

/**
 * @brief SM4 ECB模式加密（单块）
 * @param ctx SM4上下文指针
 * @param input 16字节Plaintext
 * @param output 16字节Ciphertext
 */
void SM4_Impl_Encrypt_Block(const SM4_Impl_Context* ctx, const uint8_t* input, uint8_t* output);

/**
 * @brief SM4 ECB模式解密（单块）
 * @param ctx SM4上下文指针
 * @param input 16字节Ciphertext
 * @param output 16字节Plaintext
 */
void SM4_Impl_Decrypt_Block(const SM4_Impl_Context* ctx, const uint8_t* input, uint8_t* output);

#ifdef __cplusplus
}
#endif

#endif /* __SM4_IMPL_H */
